// 引入创建分类仓库的api方法
import { defineStore } from 'pinia'
// 引入分类列表数据的类型
import type { CategoryListModel, CategoryIdsModel, Numberable } from '@/api/product/model/categoryModel'
// 引入分类列表数据相关的api接口函数
import { getCategory1ListApi, getCategory2ListApi, getCategory3ListApi } from '@/api/product/category'
// 自定义一个可以存放三个分类id和三个分类列表的接口类型
export interface CategoryStateModel extends CategoryIdsModel {
  category1List: CategoryListModel,
  category2List: CategoryListModel,
  category3List: CategoryListModel
}


export const useCategoryStore = defineStore({
  id: 'category',
  // 状态数据
  state: (): CategoryStateModel => {
    return {
      category1Id: undefined, // 一级分类的id
      category2Id: undefined, // 二级分类的id
      category3Id: undefined, // 三级分类的id
      category1List: [], // 一级分类的列表数据
      category2List: [], // 二级分类的数据
      category3List: [] // 三级分类的列表数据
    }
  },
  // 计算属性
  getters: {
    // 一级分类的id获取
    getCategory1Id(): Numberable {
      return this.category1Id
    },
    // 二级分类的id获取
    getCategory2Id(): Numberable {
      return this.category2Id
    },
    // 三级分类的id获取
    getCategory3Id(): Numberable {
      return this.category3Id
    },
    // 一级分类列表数据
    getCategoryList1(): CategoryListModel {
      return this.category1List
    },
    // 二级分类列表数据
    getCategoryList2(): CategoryListModel {
      return this.category2List
    },
    // 三级分类列表数据
    getCategoryList3(): CategoryListModel {
      return this.category3List
    }
  },
  actions: {
    // 获取一级分类列表数据
    async getCategory1List() {
      this.category1List = await getCategory1ListApi()
    },
    // 获取二级分类列表数据
    async getCategory2List(category1Id: number) {
      // 先存储一份一级分类的id数据
      this.category1Id = category1Id
      // 得到二级分类的列表数据
      this.category2List = await getCategory2ListApi(category1Id)
      // 清空二级和三级分类的id及三级分类的数组
      this.category2Id = undefined
      this.category3Id = undefined
      this.category3List = []
    },
    // 获取三级分类列表数据
    async getCategory3List(category2Id: number) {
      // 先存储一份二级分类的id数据
      this.category2Id = category2Id
      // 得到二级分类的列表数据
      this.category3List = await getCategory3ListApi(category2Id)
      this.category3Id = undefined // 清空三级分类的id
    },
  }
})
// 扔出去了
export default useCategoryStore